package com.shujia.day03;

public class Code12Functions {
    public static void main(String[] args) {

        // 需求：要求定义一个函数，完成阶乘操作
//       int n = 5;
//        System.out.println(n+"的阶乘为："+product(n));

        // 所有的程序入口都是从main函数开始的，所以函数的调用,需要以main函数开始，从内部执行

        interFunction(10); // 开始条件


        /*
            迭代函数：
                在函数的内部调用自身的函数称为迭代函数
                迭代函数要求有四部分组成：
                    ① 在main函数中对函数进行做首次调用 并且传入一个函数参数的初始值
                    ② 在函数的内部需要调用自身，并且调用时，对调用参数做控制
                    ③ 函数的函数体，循环执行的代码块
                    ④ 函数的停止标记 停止对当前函数的调用

         */


    }

    // 方式一：通过for循环方式

    public static int product(int n){
        int cNum = 1;
        for (int i = 1; i <= n; i++) {
            cNum *= i;
        }
        return cNum;
    }

    // 方式二：函数的迭代，函数的自我调用


    // 该方式是一个死循环
//    public static void interFunction(){
//        System.out.println("当前函数被调用一次...");
//        // 在当前的函数内部,调用自身
//        interFunction();
//    }

    // 如果想要对其调用过程进行控制，需要有那些条件
    // 循环结构：重复做同一件事 需要提供： 开始条件  判断条件 循环体语句 控制语句
    public static void interFunction(int num){


        // 判断条件 对当前的函数迭代调用10次，超过10词结束
//        if(num > 10){
//            // 停止
//            break;
//        }

        // 当传入值为10，那么到小于0就不去调用自身，如果在1-10之间那么就调用自身
        if(num <= 0){
            // 停止调用自身，停止标记
        }else{
            System.out.println("当前函数被调用一次，获得num的值为："+num);
            interFunction(num - 1);
        }

        // 在当前的函数内部,调用自身
    }



}
